﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Pibby.Core;
//using Pibby.Core.IO;

//namespace Pibby
//{
//    public abstract class ApplicationSettings
//    {
//        public abstract void Validate ();
//    }

//    public class GeneralSettings : ApplicationSettings
//    {
//        FileSystemFolder _folder;

//        public GeneralSettings()
//            : base()
//        {
//            _folder = new Pibby.Core.IO.FileSystemFolder(Environment.SpecialFolder.MyMusic);
//            _folder.AutoCreate = true;
//        }

//        public string LocalStorageFolder
//        {
//            get { return this._folder.Path; }
//            set 
//            {
//                this._folder.Path = value; 
//            }
//        }

//        public override void Validate()
//        {
//            Contract.EnsureIsNotNullOrEmpty(this.LocalStorageFolder, "Local storage folder cannot be blank");
//        }
//    }

//    public class PortableMediaPlayerSettings : ApplicationSettings
//    {
//        public bool Synch
//        {
//            get { return Settings.Default.MediaDevice_Synch; }
//            set { Settings.Default.MediaDevice_Synch = value; }
//        }

//        public string VolumeName
//        {
//            get { return Settings.Default.MediaDevice_VolumeName; }
//            set { Settings.Default.MediaDevice_VolumeName = value; }
//        }

//        public override void Validate()
//        {
//            if (this.Synch)
//            {
//                if (string.IsNullOrEmpty(this.VolumeName))
//                    throw new ArgumentException("Media Player volume name cannot be blank");
//            }
//        }
//    }

//    public class NetworkSettings : ApplicationSettings
//    {
//        public bool UseAuthentication
//        {
//            get { return Settings.Default.Network_UseAuthentication; }
//            set { Settings.Default.Network_UseAuthentication = value; }
//        }

//        public string UserName
//        {
//            get { return Settings.Default.Network_UserName; }
//            set { Settings.Default.Network_UserName = value; }
//        }

//        public string Password
//        {
//            get 
//            { 
//                if (string.IsNullOrEmpty (this.ConfirmPassword))
//                    this.ConfirmPassword = Settings.Default.Network_Password; 

//                return Settings.Default.Network_Password; 
//            }
//            set { Settings.Default.Network_Password = value; }
//        }

//        public string ConfirmPassword
//        {
//            get;
//            set;
//        }

//        public string Domain
//        {
//            get { return Settings.Default.Network_Domain; }
//            set { Settings.Default.Network_Domain = value; }
//        }

//        public string ProxyName
//        {
//            get { return Settings.Default.Network_ProxyName; }
//            set { Settings.Default.Network_ProxyName = value; }
//        }

//        public int ProxyPort
//        {
//            get { return Settings.Default.Network_ProxyPort; }
//            set { Settings.Default.Network_ProxyPort = value; }
//        }

//        public override void Validate()
//        {
//            // BUGBUG need custom exception...
//            if (this.UseAuthentication)
//            {
//                if (string.IsNullOrEmpty (this.UserName))
//                    throw new ArgumentException("User name cannot be blank");

//                if (!this.Password.Equals(this.ConfirmPassword, StringComparison.CurrentCulture))
//                    throw new ArgumentException(Resources.SettingsForm_PasswordsDoNotMatch);

//                if (!string.IsNullOrEmpty (this.ProxyName) && this.ProxyPort <= 0)
//                    throw new ArgumentException("Proxy port must be set to a value");
//            }
//        }
//    }

//    public class PodcastSettings
//    {
//        #region Attributes

//        private GeneralSettings _general = new GeneralSettings ();
//        private PortableMediaPlayerSettings _portableMedia = new PortableMediaPlayerSettings();
//        private NetworkSettings _network = new NetworkSettings();

//        #endregion

//        #region Properties

//        public GeneralSettings General
//        {
//            get { return this._general; }
//        }

//        public PortableMediaPlayerSettings PortableMedia
//        {
//            get { return this._portableMedia; }
//        }

//        public NetworkSettings Network
//        {
//            get { return this._network; }
//        }

//        #endregion

//        #region Methods

//        public void Save()
//        {
//            this.General.Validate();
//            this.PortableMedia.Validate();
//            this.Network.Validate();

//            Settings.Default.Save();
//        }

//        public void Rollback()
//        {
//            Settings.Default.Reload();
//        }

//        #endregion

//    }


//}
